0 CpxTRS
↳1 TrsToWeightedTrsProof (BOTH BOUNDS(ID, ID), 0 ms)
↳2 CpxWeightedTrs
↳3 TypeInferenceProof (BOTH BOUNDS(ID, ID), 0 ms)
↳4 CpxTypedWeightedTrs
↳5 CompletionProof (UPPER BOUND(ID), 0 ms)
↳6 CpxTypedWeightedCompleteTrs
↳7 NarrowingProof (BOTH BOUNDS(ID, ID), 0 ms)
↳8 CpxTypedWeightedCompleteTrs
↳9 CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID), 0 ms)
↳10 CpxRNTS
↳11 SimplificationProof (BOTH BOUNDS(ID, ID), 0 ms)
↳12 CpxRNTS
↳13 CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID), 0 ms)
↳14 CpxRNTS
↳15 IntTrsBoundProof (UPPER BOUND(ID), 420 ms)
↳16 CpxRNTS
↳17 IntTrsBoundProof (UPPER BOUND(ID), 113 ms)
↳18 CpxRNTS
↳19 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳20 CpxRNTS
↳21 IntTrsBoundProof (UPPER BOUND(ID), 386 ms)
↳22 CpxRNTS
↳23 IntTrsBoundProof (UPPER BOUND(ID), 157 ms)
↳24 CpxRNTS
↳25 ResultPropagationProof (UPPER BOUND(ID), 0 ms)
↳26 CpxRNTS
↳27 IntTrsBoundProof (UPPER BOUND(ID), 144 ms)
↳28 CpxRNTS
↳29 IntTrsBoundProof (UPPER BOUND(ID), 9 ms)
↳30 CpxRNTS
↳31 FinalProof (⇔, 0 ms)
↳32 BOUNDS(1, n^1)
plus#2(0, x12) → x12
plus#2(S(x4), x2) → S(plus#2(x4, x2))
fold#3(Nil) → 0
fold#3(Cons(x4, x2)) → plus#2(x4, fold#3(x2))
main(x1) → fold#3(x1)
plus#2(0, x12) → x12 [1]
plus#2(S(x4), x2) → S(plus#2(x4, x2)) [1]
fold#3(Nil) → 0 [1]
fold#3(Cons(x4, x2)) → plus#2(x4, fold#3(x2)) [1]
main(x1) → fold#3(x1) [1]
plus#2(0, x12) → x12 [1]
plus#2(S(x4), x2) → S(plus#2(x4, x2)) [1]
fold#3(Nil) → 0 [1]
fold#3(Cons(x4, x2)) → plus#2(x4, fold#3(x2)) [1]
main(x1) → fold#3(x1) [1]
plus#2 :: 0:S → 0:S → 0:S 0 :: 0:S S :: 0:S → 0:S fold#3 :: Nil:Cons → 0:S Nil :: Nil:Cons Cons :: 0:S → Nil:Cons → Nil:Cons main :: Nil:Cons → 0:S |
(a) The obligation is a constructor system where every type has a constant constructor,
(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:
main
fold#3
plus#2
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
Runtime Complexity Weighted TRS with Types. The TRS R consists of the following rules:
The TRS has the following type information:
Rewrite Strategy: INNERMOST |
0 => 0
Nil => 0
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 2 }→ plus#2(x4, 0) :|: z = 1 + x4 + 0, x4 >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(x1) :|: x1 >= 0, z = x1
plus#2(z, z') -{ 1 }→ x12 :|: x12 >= 0, z = 0, z' = x12
plus#2(z, z') -{ 1 }→ 1 + plus#2(x4, x2) :|: z' = x2, x4 >= 0, z = 1 + x4, x2 >= 0
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 2 }→ plus#2(z - 1, 0) :|: z - 1 >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 }→ 1 + plus#2(z - 1, z') :|: z - 1 >= 0, z' >= 0
{ plus#2 } { fold#3 } { main } |
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 2 }→ plus#2(z - 1, 0) :|: z - 1 >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 }→ 1 + plus#2(z - 1, z') :|: z - 1 >= 0, z' >= 0
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 2 }→ plus#2(z - 1, 0) :|: z - 1 >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 }→ 1 + plus#2(z - 1, z') :|: z - 1 >= 0, z' >= 0
plus#2: runtime: ?, size: O(n1) [z + z'] |
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 2 }→ plus#2(z - 1, 0) :|: z - 1 >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 }→ 1 + plus#2(z - 1, z') :|: z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
fold#3(z) -{ 2 + z }→ s' :|: s' >= 0, s' <= 1 * (z - 1) + 1 * 0, z - 1 >= 0
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] |
fold#3(z) -{ 2 + z }→ s' :|: s' >= 0, s' <= 1 * (z - 1) + 1 * 0, z - 1 >= 0
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] fold#3: runtime: ?, size: O(n1) [z] |
fold#3(z) -{ 2 + z }→ s' :|: s' >= 0, s' <= 1 * (z - 1) + 1 * 0, z - 1 >= 0
fold#3(z) -{ 2 }→ plus#2(x4, plus#2(x4', fold#3(x2'))) :|: z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 1 }→ fold#3(z) :|: z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] fold#3: runtime: O(n1) [4 + 2·z], size: O(n1) [z] |
fold#3(z) -{ 2 + z }→ s' :|: s' >= 0, s' <= 1 * (z - 1) + 1 * 0, z - 1 >= 0
fold#3(z) -{ 8 + 2·x2' + x4 + x4' }→ s2 :|: s'' >= 0, s'' <= 1 * x2', s1 >= 0, s1 <= 1 * x4' + 1 * s'', s2 >= 0, s2 <= 1 * x4 + 1 * s1, z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 5 + 2·z }→ s3 :|: s3 >= 0, s3 <= 1 * z, z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] fold#3: runtime: O(n1) [4 + 2·z], size: O(n1) [z] |
fold#3(z) -{ 2 + z }→ s' :|: s' >= 0, s' <= 1 * (z - 1) + 1 * 0, z - 1 >= 0
fold#3(z) -{ 8 + 2·x2' + x4 + x4' }→ s2 :|: s'' >= 0, s'' <= 1 * x2', s1 >= 0, s1 <= 1 * x4' + 1 * s'', s2 >= 0, s2 <= 1 * x4 + 1 * s1, z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 5 + 2·z }→ s3 :|: s3 >= 0, s3 <= 1 * z, z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] fold#3: runtime: O(n1) [4 + 2·z], size: O(n1) [z] main: runtime: ?, size: O(n1) [z] |
fold#3(z) -{ 2 + z }→ s' :|: s' >= 0, s' <= 1 * (z - 1) + 1 * 0, z - 1 >= 0
fold#3(z) -{ 8 + 2·x2' + x4 + x4' }→ s2 :|: s'' >= 0, s'' <= 1 * x2', s1 >= 0, s1 <= 1 * x4' + 1 * s'', s2 >= 0, s2 <= 1 * x4 + 1 * s1, z = 1 + x4 + (1 + x4' + x2'), x2' >= 0, x4 >= 0, x4' >= 0
fold#3(z) -{ 1 }→ 0 :|: z = 0
main(z) -{ 5 + 2·z }→ s3 :|: s3 >= 0, s3 <= 1 * z, z >= 0
plus#2(z, z') -{ 1 }→ z' :|: z' >= 0, z = 0
plus#2(z, z') -{ 1 + z }→ 1 + s :|: s >= 0, s <= 1 * (z - 1) + 1 * z', z - 1 >= 0, z' >= 0
plus#2: runtime: O(n1) [1 + z], size: O(n1) [z + z'] fold#3: runtime: O(n1) [4 + 2·z], size: O(n1) [z] main: runtime: O(n1) [5 + 2·z], size: O(n1) [z] |